昨天介紹了開發zk-SNARKs可以使用的工具,還沒看的可以點這邊觀看,而在開發的過程中,在寫驗證雜湊或者是簽章的時候,應該常常發現一個單詞叫做「ZK-friendly」,這裡的friendly到底是要友善什麼呢?讓我們來一探究竟吧!
通常有在以太坊上面寫程式的都知道,如果要使用雜湊函數的話,大多使用的雜湊函數都是使用Keccak256(SHA-3)演算法,為什麼會是用他呢?那是因為使用Keccak256算出雜湊的速度比SHA-256還快,而在之前就有說過,在以太坊上面執行程式是需要付手續費的,如果使用指令或者空間愈少,手續費會變得更加便宜,而Keccak256因為使用大量的位元運算,所以可以運算較快且指令使用也較少,所以大部分人在以太坊上面寫程式都是使用Keccak256,那在零知識證明的驗證程式中如果要產生出Keccak256雜湊的證明呢?則會需要比較多時間,為什麼呢?那是因為前一篇也有說過使用zk-SNARKs時,要先把命題轉成數學式,而這指定的數學式中,只能使用 加法 與 乘法 ,這是為了比較好湊出同態關係,也因此,使用大量位元運算的Keccak256在產生證明方面,因為位元運算轉成數學式較為複雜,所以產生證明需要耗費大量時間,所以便有ZK-friendly的想法產生,要對ZK相當友善,儘量減少位元運算,多使用加法跟乘法,所以如果有冠上ZK-friendly的,通常都是使用大量加法與乘法實作出來的,所以有提出ZK-friendly的雜湊函數像是MIMC7或者Poseidon,以及ZK-friendly的簽章方法像是EdDSA簽章,因此如果要開發zk-SNARKs的相關應用時,可以儘量使用ZK-friendly的雜湊或者簽章,可以比較快的產出證明。
以上便是針對開發zk-SNARKs應用所做出的提醒,但是同時也告訴各位,ZK-friendly是一把雙面刃,雖然可以減少產生證明的時間,但是如果把他放在以太坊上面跑,會耗費大量的手續費,因此在開發過程中,要想清楚這個雜湊或者簽章主要是服務哪個的,講完之後,明天來讓我們看看這個零知識證明能帶來什麼樣的應用吧!